﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VkSample112;

public class ObjectData
{
    public float[] Data { get; set; }
	public int DataBytes { get; set; }
    public int VCount { get; set; }

    public void GenVertexData()
    {
        List<float> alVertix = new();
        List<float> alTexCoor = new();
        float Y_MAX = 1.5f;//Y的最大值
        float Y_MIN = -1.5f;//Y的最小值
        int FD = 6;//一面中矩形个数
        float hw = 0.575f;//矩形宽度的一半
        float yStart = Y_MIN;//起始Y坐标
        float ySpan = (Y_MAX - Y_MIN) / FD;//Y坐标的步进
		for (int i = 0; i < FD; i++)
		{
			float x1 = -hw;
			float y1 = yStart;
			float z1 = hw;

			float x2 = hw;
			float y2 = yStart;
			float z2 = hw;

			float x3 = hw;
			float y3 = yStart;
			float z3 = -hw;

			float x4 = -hw;
			float y4 = yStart;
			float z4 = -hw;

			float x5 = -hw;
			float y5 = yStart + ySpan;
			float z5 = hw;

			float x6 = hw;
			float y6 = yStart + ySpan;
			float z6 = hw;

			float x7 = hw;
			float y7 = yStart + ySpan;
			float z7 = -hw;

			float x8 = -hw;
			float y8 = yStart + ySpan;
			float z8 = -hw;

			alVertix.Add(x5);
			alVertix.Add(y5);
			alVertix.Add(z5);
			alVertix.Add(x1);
			alVertix.Add(y1);
			alVertix.Add(z1);
			alVertix.Add(x2);
			alVertix.Add(y2);
			alVertix.Add(z2);

			alVertix.Add(x5);
			alVertix.Add(y5);
			alVertix.Add(z5);
			alVertix.Add(x2);
			alVertix.Add(y2);
			alVertix.Add(z2);
			alVertix.Add(x6);
			alVertix.Add(y6);
			alVertix.Add(z6);

			alVertix.Add(x6);
			alVertix.Add(y6);
			alVertix.Add(z6);
			alVertix.Add(x2);
			alVertix.Add(y2);
			alVertix.Add(z2);
			alVertix.Add(x3);
			alVertix.Add(y3);
			alVertix.Add(z3);

			alVertix.Add(x6);
			alVertix.Add(y6);
			alVertix.Add(z6);
			alVertix.Add(x3);
			alVertix.Add(y3);
			alVertix.Add(z3);
			alVertix.Add(x7);
			alVertix.Add(y7);
			alVertix.Add(z7);

			alVertix.Add(x7);
			alVertix.Add(y7);
			alVertix.Add(z7);
			alVertix.Add(x3);
			alVertix.Add(y3);
			alVertix.Add(z3);
			alVertix.Add(x4);
			alVertix.Add(y4);
			alVertix.Add(z4);

			alVertix.Add(x7);
			alVertix.Add(y7);
			alVertix.Add(z7);
			alVertix.Add(x4);
			alVertix.Add(y4);
			alVertix.Add(z4);
			alVertix.Add(x8);
			alVertix.Add(y8);
			alVertix.Add(z8);

			alVertix.Add(x8);
			alVertix.Add(y8);
			alVertix.Add(z8);
			alVertix.Add(x4);
			alVertix.Add(y4);
			alVertix.Add(z4);
			alVertix.Add(x1);
			alVertix.Add(y1);
			alVertix.Add(z1);

			alVertix.Add(x8);
			alVertix.Add(y8);
			alVertix.Add(z8);
			alVertix.Add(x1);
			alVertix.Add(y1);
			alVertix.Add(z1);
			alVertix.Add(x5);
			alVertix.Add(y5);
			alVertix.Add(z5);

			yStart = yStart + ySpan;

			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);

			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);

			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);

			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);
			alTexCoor.Add(0);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(1);
			alTexCoor.Add(0);
		}
		VCount = FD * 4 * 6;//计算顶点数量
		DataBytes = VCount * 5 * sizeof(float);//计算数据所占字节数
		Data = new float[VCount * 5];//创建存放数据的数组
		int index = 0;//辅助索引
		for (int i = 0; i < VCount; i++)
		{//将顶点数据和纹理坐标数据存储到数组中
			Data[index++] = alVertix[i * 3 + 0];
			Data[index++] = alVertix[i * 3 + 1];
			Data[index++] = alVertix[i * 3 + 2];
			Data[index++] = alTexCoor[i * 2 + 0];
			Data[index++] = alTexCoor[i * 2 + 1];
		}
	}
}
